import { mergeOptions } from "../util/options"

export function initGlobalAPI(Vue) {
  Vue.options = {}
  Vue.Mixin = function(mixin){
    Vue.options = mergeOptions(this.options, mixin)
    // console.log('[ this.options ] >', this.options)
    // 源码结构 不管你创建多少个都是放在这个数组里面
    // {created:[a,b,c]}
    // 对象合并
  }
  // 在vue中定义一个全局方法
  Vue.options.component = {} //放置全局组件
  Vue.component = function (id,componentDef){
    componentDef.name = componentDef.name || id
    //创建组件的核心是Vue.extend
    componentDef = this.extend(componentDef)
    this.options.component[id] = componentDef
    // console.log('[ this.options ] >', this.options)
  }

  // 创建一个子类
  Vue.extend = function(options){
    let spuer = this
    const Sub = function vuecomponet(opts){
      this._init(opts)
    }
    // 子组件继承父组件所有的实例 Vue类的继承
    Sub.prototype = Object.create(spuer.prototype)
    // 改变子组件的this指向问题
    Sub.prototype.constructor = Sub
    // 将父组件中的属性合并到子组件中
    Sub.options = mergeOptions(this.options,options)
    return Sub
  }
}
 